﻿/*
 Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or http://ckeditor.com/license
 */
CKEDITOR.dialog.add("specialchar", function (i) {
    var e, l = i.lang.specialchar, k = function (c) {
        var b, c = c.data ? c.data.getTarget() : new CKEDITOR.dom.element(c);
        if ("a" == c.getName() && (b = c.getChild(0).getHtml()))c.removeClass("cke_light_background"), e.hide(), c = i.document.createElement("span"), c.setHtml(b), i.insertText(c.getText())
    }, m = CKEDITOR.tools.addFunction(k), j, g = function (c, b) {
        var a, b = b || c.data.getTarget();
        "span" == b.getName() && (b = b.getParent());
        if ("a" == b.getName() && (a = b.getChild(0).getHtml())) {
            j && d(null, j);
            var f = e.getContentElement("info", "htmlPreview").getElement();
            e.getContentElement("info", "charPreview").getElement().setHtml(a);
            f.setHtml(CKEDITOR.tools.htmlEncode(a));
            b.getParent().addClass("cke_light_background");
            j = b
        }
    }, d = function (c, b) {
        b = b || c.data.getTarget();
        "span" == b.getName() && (b = b.getParent());
        "a" == b.getName() && (e.getContentElement("info", "charPreview").getElement().setHtml("&nbsp;"), e.getContentElement("info", "htmlPreview").getElement().setHtml("&nbsp;"), b.getParent().removeClass("cke_light_background"),
            j = void 0)
    }, n = CKEDITOR.tools.addFunction(function (c) {
        var c = new CKEDITOR.dom.event(c), b = c.getTarget(), a;
        a = c.getKeystroke();
        var f = "rtl" == i.lang.dir;
        switch (a) {
            case 38:
                if (a = b.getParent().getParent().getPrevious())a = a.getChild([b.getParent().getIndex(), 0]), a.focus(), d(null, b), g(null, a);
                c.preventDefault();
                break;
            case 40:
                if (a = b.getParent().getParent().getNext())if ((a = a.getChild([b.getParent().getIndex(), 0])) && 1 == a.type)a.focus(), d(null, b), g(null, a);
                c.preventDefault();
                break;
            case 32:
                k({data: c});
                c.preventDefault();
                break;
            case f ? 37 : 39:
                if (a = b.getParent().getNext())a = a.getChild(0), 1 == a.type ? (a.focus(), d(null, b), g(null, a), c.preventDefault(!0)) : d(null, b); else if (a = b.getParent().getParent().getNext())(a = a.getChild([0, 0])) && 1 == a.type ? (a.focus(), d(null, b), g(null, a), c.preventDefault(!0)) : d(null, b);
                break;
            case f ? 39 : 37:
                (a = b.getParent().getPrevious()) ? (a = a.getChild(0), a.focus(), d(null, b), g(null, a), c.preventDefault(!0)) : (a = b.getParent().getParent().getPrevious()) ? (a = a.getLast().getChild(0), a.focus(), d(null, b), g(null, a), c.preventDefault(!0)) :
                    d(null, b)
        }
    });
    return{title: l.title, minWidth: 430, minHeight: 280, buttons: [CKEDITOR.dialog.cancelButton], charColumns: 17, onLoad: function () {
        for (var c = this.definition.charColumns, b = i.config.specialChars, a = CKEDITOR.tools.getNextId() + "_specialchar_table_label", f = ['<table role="listbox" aria-labelledby="' + a + '" style="width: 320px; height: 100%; border-collapse: separate;" align="center" cellspacing="2" cellpadding="2" border="0">'], d = 0, g = b.length, h, e; d < g;) {
            f.push('<tr role="presentation">');
            for (var j = 0; j < c; j++,
                d++) {
                if (h = b[d]) {
                    h instanceof Array ? (e = h[1], h = h[0]) : (e = h.replace("&", "").replace(";", "").replace("#", ""), e = l[e] || h);
                    var k = "cke_specialchar_label_" + d + "_" + CKEDITOR.tools.getNextNumber();
                    f.push('<td class="cke_dark_background" style="cursor: default" role="presentation"><a href="javascript: void(0);" role="option" aria-posinset="' + (d + 1) + '"', ' aria-setsize="' + g + '"', ' aria-labelledby="' + k + '"', ' class="cke_specialchar" title="', CKEDITOR.tools.htmlEncode(e), '" onkeydown="CKEDITOR.tools.callFunction( ' + n +
                        ', event, this )" onclick="CKEDITOR.tools.callFunction(' + m + ', this); return false;" tabindex="-1"><span style="margin: 0 auto;cursor: inherit">' + h + '</span><span class="cke_voice_label" id="' + k + '">' + e + "</span></a>")
                } else f.push('<td class="cke_dark_background">&nbsp;');
                f.push("</td>")
            }
            f.push("</tr>")
        }
        f.push("</tbody></table>", '<span id="' + a + '" class="cke_voice_label">' + l.options + "</span>");
        this.getContentElement("info", "charContainer").getElement().setHtml(f.join(""))
    }, contents: [
        {id: "info", label: i.lang.common.generalTab,
            title: i.lang.common.generalTab, padding: 0, align: "top", elements: [
            {type: "hbox", align: "top", widths: ["320px", "90px"], children: [
                {type: "html", id: "charContainer", html: "", onMouseover: g, onMouseout: d, focus: function () {
                    var c = this.getElement().getElementsByTag("a").getItem(0);
                    setTimeout(function () {
                        c.focus();
                        g(null, c)
                    }, 0)
                }, onShow: function () {
                    var c = this.getElement().getChild([0, 0, 0, 0, 0]);
                    setTimeout(function () {
                        c.focus();
                        g(null, c)
                    }, 0)
                }, onLoad: function (c) {
                    e = c.sender
                }},
                {type: "hbox", align: "top", widths: ["100%"], children: [
                    {type: "vbox",
                        align: "top", children: [
                        {type: "html", html: "<div></div>"},
                        {type: "html", id: "charPreview", className: "cke_dark_background", style: "border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;", html: "<div>&nbsp;</div>"},
                        {type: "html", id: "htmlPreview", className: "cke_dark_background", style: "border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",
                            html: "<div>&nbsp;</div>"}
                    ]}
                ]}
            ]}
        ]}
    ]}
});